package cn.fz.jpademo01.domain.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Lob;
import jakarta.persistence.Transient;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * 用户实体类
 * @Entity 表示该类是一个实体类，可以映射为数据库表。name属性用于自定义表名，
 * 不设置name属性时默认会取类名转化为全小写+下划线分隔的字符串作为表名，比如类名为SysUser则默认映射的表名为sys_user。
 * 在使用了@Entity注解的类中，必须要有一个使用@Id注解修饰的属性。
 */
@Getter
@Setter
@ToString
@Entity(name = "sys_user")
public class SysUser extends BaseEntity{
    /**
     * 用户名
     * @Column，表示该属性是一个表中的字段，unique = true可以在对应字段上定义唯一约束，
     * 在有@Entity注解修饰的类中，属性上不加@Column注解也可以被映射为字段。
     */
    @Column(unique = true)
    private String username;
    /**
     * 密码
     */
    private String password;
    /**
     * 电话
     */
    private String phone;
    /**
     * 个人介绍
     * @Lob，表示该属性需要映射成数据库支持的大对象类型的字段，比如Clob或者Blob。
     */
    @Lob
    private String introduce;
    /**
     * 所属部门ID
     */
    private Long departmentId;
    /**
     * 所属部门
     * 在使用了@Entity注解的类中，所有的属性都会被映射为数据库表中的字段，除非属性上使用了@Transient注解。
     * @Transient，表示该属性并非一个到数据库表中字段的映射，ORM框架映射时会忽略该属性。
     */
    @Transient
    private Department department;
}
